

using System;
using System.Collections.Generic;
using System.Data.Odbc;
using Gestion_Api.AccesoDatos;
using System.Data.SqlClient;
using System.Data;
namespace Escuela
{
    public class Profesor
    {
        private int Id;
        private string nombre;
        private string apellido;
        private string dni;
        private string email;
        private string direccion;
        private string telefono;
        private string celular;
        private bool activo;
        private DateTime fechaDeNacimiento;
        private DateTime fechaDeIngreso;
        private List<Materia> materias;


        #region getter setter

        public int id
        {
            get { return Id; }
            set { Id = value; }
        }

        public string Nombre
        {
            get { return nombre; }
            set { nombre = value; }
        }

        public string Apellido
        {
            get { return apellido; }
            set { apellido = value; }
        }

        public string Dni
        {
            get { return dni; }
            set { dni = value; }
        }

        public string Direccion
        {
            get { return direccion; }
            set { direccion = value; }
        }

        public string Email
        {
            get { return email; }
            set { email = value; }
        }

        public string Telefono
        {
            get { return telefono; }
            set { telefono = value; }
        }

        public string Celular
        {
            get { return celular; }
            set { celular = value; }
        }

        public bool Activo
        {
            get { return activo; }
            set { activo = value; }
        }

        public DateTime FechaDeNacimiento
        {
            get { return fechaDeNacimiento; }
            set { fechaDeNacimiento = value; }
        }

        public DateTime FechaDeIngreso
        {
            get { return fechaDeIngreso; }
            set { fechaDeIngreso = value; }
        }

        public List<Materia> Materias
        {
            get { return materias; }
            set { materias = value; }
        }

        #endregion

        public void agregarMateria(Materia materia)
        {

        }

        public void agregarCursable(Cursable cursable)
        {

        }

        public int agregarDB(Profesor profesor)
        {
            //Genero la clase de conexion
            AccesoDB ad = new AccesoDB();

            //genero query
            string query = "coop_profesor_Insert ";
            query += "'" + profesor.nombre + "', ";
            query += "'" + profesor.apellido + "', ";
            query += "'" + profesor.celular + "', ";
            query += "'" + profesor.direccion + "', ";
            query += "'" + profesor.dni + "', ";
            query += "'" + profesor.email + "', ";
            query += "'" + profesor.fechaDeIngreso.ToString("yyyyMMdd") + "', ";
            query += "'" + profesor.fechaDeNacimiento.ToString("yyyyMMdd") + "', ";
            query += "'" + profesor.telefono + "'";


            SqlCommand command = new SqlCommand();
            //command.Connection = connection;
            command.CommandText = query;
            command.CommandType = CommandType.Text;

            //Ejecuto el query
            int resp = ad.ejecQueryResp(command);

            return resp;
        }


        public bool updateProfesor(Profesor al)
        {
            Profesor profesor = this.buscarEnDB(al.dni);
            if (profesor == null || profesor.dni != al.dni)
            {
                return false;
            }
            else
            {
                AccesoDB ad = new AccesoDB();

                //genero query
                string query = "coop_profesor_Update ";
                query += "'" + al.id + "', ";
                query += "'" + al.activo + "', ";
                query += "'" + al.apellido + "',";
                query += "'" + al.celular + "', ";
                query += "'" + al.direccion + "', ";
                query += "'" + al.dni + "', ";
                query += "'" + al.email + "', ";
                query += "'" + al.fechaDeIngreso.ToString("yyyyMMdd") + "', ";
                query += "'" + al.fechaDeNacimiento.ToString("yyyyMMdd") + "', ";
                query += "'" + al.nombre + "',";
                query += "'" + al.telefono + "'";

                SqlCommand command = new SqlCommand();
                //command.Connection = connection;
                command.CommandText = query;
                command.CommandType = CommandType.Text;

                int resp = ad.ejecQueryResp(command);
                return true;
            }

        }

        public bool delProfesor(Profesor al)
        {
            Profesor profesor = this.buscarEnDB(al.dni);
            if (profesor == null || profesor.dni != al.dni)
            {
                return false;
            }
            else
            {
                AccesoDB ad = new AccesoDB();

                //genero query
                string query = "coop_profesor_Delete ";
                query += "'" + al.id +"'";
               

                SqlCommand command = new SqlCommand();
                //command.Connection = connection;
                command.CommandText = query;
                command.CommandType = CommandType.Text;

                int resp = ad.ejecQueryResp(command);
                return true;
            }

        }

        public Profesor buscarEnDB(string dni)
        {

            //Genero la clase de conexion
            AccesoDB ad = new AccesoDB();

            string query = "coop_profesor_GetOne '" + dni.Trim().Replace(".", "") + "'";

            SqlCommand command = new SqlCommand();
            //command.Connection = connection;
            command.CommandText = query;
            command.CommandType = CommandType.Text;

            //Ejecuto query y lo cargo en un data reader
            SqlDataReader dr = ad.ExecuteReader(command);
            
            //Ejecuto query y lo cargo en un data reader
            //SqlDataReader dr = ad.ExecuteReader(query);

            //recorro data reader
            if (dr.HasRows)
            {
                //Profesor profesor = new Profesor();
                Profesor al = new Profesor();
                while (dr.Read())
                {
                    //profesor.id = dr.GetInt32(0);
                    //profesor.apellido = dr.GetString(2);
                    //profesor.celular = dr.GetString(3);
                    //profesor.direccion = dr.GetString(4);
                    //profesor.dni = dr.GetString(5);
                    //profesor.email = dr.GetString(6);
                    //profesor.fechaDeIngreso = dr.GetDateTime(7);
                    //profesor.fechaDeNacimiento = dr.GetDateTime(8);
                    //profesor.nombre = dr.GetString(9);
                    //profesor.telefono = dr.GetString(10);
                    al.id = Convert.ToInt32(dr[0]);
                    al.apellido = dr[2].ToString();
                    al.celular = dr[3].ToString();
                    al.direccion = dr[4].ToString();
                    al.dni = dr[5].ToString();
                    al.email = dr[6].ToString();
                    al.fechaDeIngreso = Convert.ToDateTime(dr[7]);
                    al.fechaDeNacimiento = Convert.ToDateTime(dr[8]);
                    al.nombre = dr[9].ToString();
                    al.telefono = dr[10].ToString();
                }

                //Cierro el data reader
                dr.Close();
                return al;
            }
            else
            {
                //no encontre registros en la DB
                return null;
            }
        }

        public DataTable obtenerClasesPeriodo(DateTime fechaInicio, DateTime fechaFin)
        {
            string query = null;

            System.Data.DataTable dt = new System.Data.DataTable();
            AccesoDB ac = new AccesoDB();
            query = "coop_profesor_GetClasesPeriodo ";
            query += this.id + ", ";
            query += "'"+fechaInicio.ToString("yyyyMMdd") + "',";
            query += "'"+fechaFin.ToString("yyyyMMdd")+"'";

            SqlCommand command = new SqlCommand();
            //command.Connection = connection;
            command.CommandText = query;
            command.CommandType = CommandType.Text;

            return dt = ac.execDT(command);
        }

        public double totalCursosActivos()
        {
            string query = null;

            System.Data.DataTable dt = new System.Data.DataTable();
            AccesoDB ac = new AccesoDB();
            query = "coop_profesor_GetTotalCursosActivos ";
            query += this.id;
           

            SqlCommand command = new SqlCommand();
            //command.Connection = connection;
            command.CommandText = query;
            command.CommandType = CommandType.Text;

            dt = ac.execDT(command);
            double total = 0;
            foreach (DataRow dr in dt.Rows)
            {
                total = Convert.ToDouble(dr[0]);
            }
            return total;

        }

        public int pagar(int idPago)
        {

            //Genero la clase de conexion
            AccesoDB ad = new AccesoDB();

            //genero query
            string query = "coop_pago_profesor_Insert ";
            query += idPago + ", ";
            query += this.id;

            //Ejecuto el query
            //int resp = ad.ejecQuery(query);

            SqlCommand command = new SqlCommand();
            //command.Connection = connection;
            command.CommandText = query;
            command.CommandType = CommandType.Text;

            int resp = ad.ejecQueryResp(command);

            return resp;

        }
    }
}